#include <iostream>
#include "Time.hpp"
using namespace std;

class B
{
public:
    virtual void f1(double x)
    {
        cout << "B::f1(double)" <<  x << endl;
    }
    void f2(double x)
    {
        cout << "B::f2(double)" << x * 2<< endl;
    }
    void f3(double x)
    {
        cout << "B::f3(double)" << x * 3 << endl;
    }
};


class D : public B
{
    public:
    virtual void f1(double x)
    {
        cout << "D::f1(double)" << x << endl;
    }
    void f2(int x)
    {
        cout << "D::f2(int)" << x * 2 << endl;
    }
    void f3(double x)
    {
        cout << "D::f3(double)" << x * 3 << endl;
    }
};

void test01()
{
    D d;
    B * pb = &d;
    D * pd = &d;
    pb->f1(1.23);
    pd->f1(1.23);
    pb->f2(1.23);
    pb->f3(1.23);
    pd->f3(3.14);
}


void test02()
{
    // 创建两个 Time 对象
    Time time1(1, 45, 55); // 1小时45分钟55秒
    Time time2(0, 20, 30); // 0小时20分钟30秒

    // 显示初始时间
    cout << "初始时间1: ";
    time1.Display(); // 输出: 1:45:55

    cout << "初始时间2: ";
    time2.Display(); // 输出: 0:20:30

    // 相加两个时间
    Time time3 = time1 + time2;

    // 显示相加后的结果
    cout << "相加后的时间: ";
    time3.Display(); // 输出: 2:06:25

    // 创建一个时间对象并测试进位
    Time time4(12, 59, 59);
    Time time5(0, 1, 1);

    // 显示初始时间
    cout << "初始时间4: ";
    time4.Display(); // 输出: 12:59:59

    cout << "初始时间5: ";
    time5.Display(); // 输出: 0:1:1

    // 相加两个时间
    Time time6 = time4 + time5;

    // 显示相加后的结果
    cout << "相加后的时间6: ";
    time6.Display(); // 输出: 13:0:0

    // 创建一个时间对象并测试小时数为负
    Time time7(-1, 30, 45);

    // 显示初始时间
    cout << "初始时间7: ";
    time7.Display(); // 输出: 0:30:45

    // 创建一个时间对象并测试分钟和秒数为负
    Time time8(10, -10, -5);

    // 显示初始时间
    cout << "初始时间8: ";
    time8.Display(); // 输出: 10:0:55
}


int main()
{
    // test01();
    test02();

    return 0;
}